# 半成品
# 1. ；2。GUI；3.区分壁纸分辨率下载


import requests
from lxml import etree
import os

headersvalue = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36 Edg/94.0.992.50'}
translation = {'nature': '自然', 'anime': '动漫', 'anime girls': '动漫女孩', 'digital art': '数字艺术', 'colorful': '色彩丰富',
'landscape': '风景', 'minimalism': '极简主义', 'abstract': '抽象', 'League of Legends': 'LOL，英雄联盟', 'Final Fantasy': '《最终幻想》',
'artwork': '艺术品', '4K': ',,,', 'fantasy art': '幻想艺术', 'WLOP': '鬼刀', 'Chinese dress': '旗袍', 'Korean women': '韩国女人',
'pattern': '图案', 'science fiction': '科幻电影', 'pixel art': '像素艺术', 'One Piece': '海贼王', 'Wonder Woman': '神奇女侠',
'mountains': '山脉', 'Studio Ghibli': '宫崎骏', 'technology': '科技', 'CGI': '计算机生成影像', 'D.Va (Overwatch)': '守望先锋中的一名坦克英雄',
'cyberpunk': '赛博朋克', 'video games': '电子游戏', 'fantasy girl': '幻想女孩', 'Neon Genesis Evangelion': '新世纪福音战士', 
'Arch Linux': '系统', 'plants': '植物', 'Ganyu (Genshin Impact)': '甘雨，《原神》中的角色', 'simple background': '简约背景', 
'Katsuragi Misato': '葛城美里', 'cityscape': '都市风光', 'Hu Tao (Genshin Impact)': '胡桃，《原神》中的角色', 'Overwatch': '守望先锋',
'Naruto (anime)': '漩涡鸣人，《火影忍者》男主角', 'Chainsaw Man': '电锯人', 'SpongeBob SquarePants': '海绵宝宝', 'sky': '天空',
'cosplay': '角色扮演', 'winter': '冬天', 'Violet Evergarden': '《薇尔莉特·伊芙加登》', 'space': '太空', 'Windwalker Ture': '一位画师的名字',
'Spider-Man': '蜘蛛侠', 'sand': '沙滩', 'Arknights': '明日方舟', 'Dandonfuga': '一位画师的名字', 'Sakimichan': '一位画师的名字',
'car': '汽车', 'snow': '雪景', 'anime boys': '动漫男孩', 'tilt shift': '移轴摄影', 'cats': '猫', 'national park': '美国国家公园',
'fall': '秋天', 'forest': '森林', 'leaves': '叶子', '3D':',,,', 'classical art': '古典艺术', 'fractal': '分形', 'phone': '手机',
'knowledge': '知识', 'futuristic': '未来主义', 'GUWEIZ': '一位画师的名字', 'neon': '霓虹灯', 'Pokémon': '《宝可梦》', 'monochrome': '纯色',
'Eula (Genshin Impact)': '欧拉，《原神》中的角色', 'Azur Lane': '碧蓝航线，一款游戏', 'Naruto Shippuuden': '《火影忍者疾风传》',
'Rick and Morty': '《瑞克和莫蒂》，一部美国成人动画科幻情景喜剧', 'city': '城市', 'school uniform': '校服', 'blonde': '金发女郎',
'Mona (Genshin Impact)': '莫娜，《原神》中的角色', 'Miia (Monmusu)': '米亚，《魔物娘的相伴日常》中的角色', 'mech': '机械', 'redhead': '红发人',
'women with glasses': '戴眼镜的女人', 'Tifa Lockhart': '蒂法·洛克哈特，《最终幻想7》中的女主角之一', 'spaceship': '宇宙飞船', 
'code': '代码', 'humor': '幽默', 'video game art': '电子游戏艺术', 'hacking': '黑客', 'Vi (League of Legends)': 'LOL中一个英雄的名字',
'Caitlyn (League of Legends)': 'LOL中一个英雄的名字', 'Cyberpunk 2077': '赛博朋克 2077', 'looking at viewer': '人脸照（我瞎编的）',
'maid outfit': '女仆装', 'Nier: Automata': '《尼尔：机械纪元》', 'Touhou': '东方', 'Honkai Impact 3rd': '《崩坏 3》',
'fantasy architecture': '奇幻建筑', 'Star Wars': '《星球大战》'
}

def get_info():
    # 网站所有的标签（几千种）：https://wallhaven.cc/tags
    url = 'https://wallhaven.cc/tags/popular'
    r = requests.get(url, headers=headersvalue)
    html = etree.HTML(r.text)
    taglist_tagmain = html.xpath('//div[@class="taglist-tagmain"]/span[1]')
    taglist_stats = html.xpath('//div[@class="taglist-stats"]//text()')
    taglists = []
    for i in taglist_tagmain:
        # 构造这个东西：taglists = [(name, link, (num, view, sub)), (name, link, (num, view, sub)), ...]
        tag_url = i.xpath('a/@href')
        tag_name = i.xpath('a/@title')
        n = taglist_tagmain.index(i)
        tag_stats = tuple(taglist_stats[n*3:n*3+3])
        tag_info = tag_name[0], tag_url[0], tag_stats
        taglists.append(tag_info)
    print('{:3}{:62}{:20}{:17}{:15}'.format('', '类别——[译者注]', '壁纸数量', '浏览量', '订阅人数'))
    print('='*140)
    No = 1
    for tag in taglists:
        try:
            real_len = len(tag[0]) + 4 + 2*len(translation[tag[0]])
            print('{:>3}.{}{:{blank}}'.format(No, tag[0]+'——[{}]'.format(translation[tag[0]]), '', blank = 60-real_len),end='')
            
        except KeyError:
            real_len = len(tag[0]) + 4
            print('{:>3}.{}{:{blank}}'.format(No, tag[0]+'——[]', '', blank = 60-real_len),end='')
            
        print('{:^21}{:^23}{:^19}'.format(tag[2][0], tag[2][1], tag[2][2]))
        No += 1
        print('-'*140)
    print('想下载哪一种？')
    choice = int(input('输入对应的序号：'))
    num = int(input('需要下载多少张？\n'))
    id = taglists[choice-1][1].split('/')[-1]
    pages = int(num/24) + 1
    page_urls = []
    for page in range(pages):
        page_url = 'https://wallhaven.cc/search?q=id%3A' + id + '&page=' + str(page+1)
        page_urls.append(page_url)
    return page_urls, num

def get_jpg(atuple):
    for page_url in atuple[0]:
        r_page = requests.get(page_url, headers=headersvalue)
        html = etree.HTML(r_page.text)
        photo_urls = html.xpath('//div[@id="thumbs"]//figure/a/@href')
        No = 0
        while No < len(photo_urls) < atuple[1]:
            r_photo = requests.get(photo_urls[No], headers=headersvalue)
            html = etree.HTML(r_photo.text)
            node_img = html.xpath('//section[@id="showcase"]/div[1]/img')
            jpg_name = node_img[0].xpath('./@alt')[0]
            jpg_url = node_img[0].xpath('./@src')[0]
            r_jpg = requests.get(jpg_url, headers=headersvalue)
            if not os.path.exists(r'd:/MyModHeaven_on_52pojie'):
                os.mkdir('d:/MyModHeaven_on_52pojie')
            with open(r'd:/MyModHeaven_on_52pojie/{}.jpg'.format(jpg_name), 'wb') as f:
                f.write(r_jpg.content)
            No += 1
            print('第{}张图片：{}，下载完成！'.format(No, jpg_name))

def main():
    get_jpg(get_info())

main()






